#include<iostream>
#include"../Com/httplib.h"
#include<jsoncpp/json/json.h>  
#include"compiler_run.hpp"

using namespace ns_compiler_run;
using namespace httplib;

void Usage(const char* program_name)
{
    std::cerr << "Usage: " << program_name << " port" << std::endl;
}

int main(int argc,char *argv[])
{
    if(argc!= 2)
    {
        Usage(argv[0]);
        return 1;
    }

//////////////////////////////////////////////////////////////////////////////////////////
    //接入cpp-httplib形成网络交互，将cr模块打包成网络服务
    //测试：
    // Server svr;

    // svr.Get("/hello",[](const Request& req, Response& res){
    //     res.set_content("Hello World! 你好世界！", "text/plain;charset=utf-8");
    // });

    Server svr;
    svr.Post("/compiler_run",[](const Request& req, Response& resp){
        std::string in_json;
        std::string out_json;
        in_json = req.body;
        if(!in_json.empty())
        {
            CompilerAndRun::Start(in_json, &out_json);
            resp.set_content(out_json, "application/json;charset=utf-8");
        }  
    });
    svr.listen("0.0.0.0", std::atoi(argv[1]));


//////////////////////////////////////////////////////////////////////////////////////////
    // std::string in_json;
    // Json::Value in_value;
// 
//     in_value["code"] = R"(#include<iostream>
// int main()
// {
//     // int *p = new int[10240 * 5000000000];
//     // while(1);
//     // aaaaaaaaaaa
//     std::cout << "我看到hello world" << std::endl;
//     return 0;
// } )";
//     in_value["input"] = " ";
//     in_value["cpu_limit"] = 1;
//     in_value["memory_limit"] = 10240 * 3;


//     //下面的写法解决jsoncpp会将中文进行Unicode转义的问题

//     // 适配旧版本jsoncpp的写法（无defaultSettings()）
//     Json::StreamWriterBuilder builder;
//     // 直接配置settings_映射表
//     builder.settings_["emitUTF8"] = true;  // 核心：取消Unicode转义
//     builder.settings_["indentation"] = "";  // 紧凑输出，类似FastWriter

//     // 生成JSON字符串
//     std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
//     std::stringstream ss;
//     writer->write(in_value, &ss);
//     in_json = ss.str();

//     std::string out_json;

//     CompilerAndRun::Start(in_json, &out_json);

//     std::cout << out_json << std::endl;
//////////////////////////////////////////////////////////////////////////////////////////
    // Json::FastWriter writer;
    // in_json = writer.write(in_value);
    // std::string out_json;
    // CompilerAndRun::Start(in_json, &out_json);
    // std::cout << out_json << std::endl;
//////////////////////////////////////////////////////////////////////////////////////////

    // std::string file_name = "Code";

    // compiler::Complie(file_name);
    // Run::run(file_name,2,20);

    // // if(compiler::Complie(file_name))
    // //     std::cout << "Compile Success" << std::endl;
    // // else
    // //     std::cout << "Compile Failed" << std::endl;

    return 0;
}